package com.rp.erchashu;

public class BinaryTree {

    /**
     * 初始化node节点
     * @return
     */
    public Node init(){
        //注意: 必须逆序建立,先建立子节点,再逆序往上建立, 因为非叶子节点会使用到下面的节点,
        // 初始化是按照顺序初始化的,不逆序建立会报错
        Node g = new Node(2,null,null);
        Node h = new Node(4,null,null);
        Node j = new Node(8,null,null);

        Node d = new Node(1,null,g);
        Node e = new Node(5,h,null);
        Node f = new Node(7,null,j);

        Node b = new Node(3,d,e);
        Node c = new Node(9,f,null);
        Node a = new Node(6,b,c);
        return a ;
    }


    public void printNode(Node node){
        System.out.println(node.getData());

    }




    //前序遍历 根 左 右
    public void theFirstTraversal(Node node){
        printNode(node);
        //使用递归进行遍历左侧的节点
        if(node.getLeftNode() != null){
            theFirstTraversal(node.getLeftNode());
        }
        if(node.getRightNode() != null){
            theFirstTraversal(node.getRightNode());
        }
    }

    //中序遍历 左 右 根
    public void middleTraversal(Node node){
        if(node.getLeftNode() != null){
            middleTraversal(node.getLeftNode());
        }
        printNode(node);
        if(node.getRightNode() != null){
            middleTraversal(node.getRightNode());
        }
    }

    //后序遍历 左 根 右
    public void postTraversal(Node node){
        if(node.getLeftNode() != null){
            postTraversal(node.getLeftNode());
        }
        if(node.getRightNode() != null){
            postTraversal(node.getRightNode());
        }
        printNode(node);
    }


    public static void main(String[] args) {
        BinaryTree bt =new BinaryTree();
        Node init = bt.init();

        System.out.println("前序遍历结果");
        bt.theFirstTraversal(init);
        System.out.println("-------> 631254978");
        System.out.println("--------");


        System.out.println("中序遍历结果");
        bt.middleTraversal(init);
        System.out.println("----------> 124537896");
        System.out.println("-------");


        System.out.println("后序遍历结果");
        bt.postTraversal(init);
        System.out.println("---------->214538796");

    }
}
